package com.example.month11.navigation.navigationbar;

import android.app.Activity;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;

import com.example.recyclerview01.R;

/**
 * Builder设计模式，打造NavigationBar头部。
 * 知识点：泛型 +Builder设计模式
 * 后续扩展：1.继承自AbsNavigationBar来实现新的类；
 * 2. 继承自DefaultNavigationBar，来实现功能。
 *      public public class DefaultNavigationBar<D extends  DefaultNavigationBar.Builder.DefaultNavigationParams> ...
 */
public class DefaultNavigationBar extends
        AbsNavigationBar<DefaultNavigationBar.Builder.DefaultNavigationParams> {

    public DefaultNavigationBar(DefaultNavigationBar.Builder.DefaultNavigationParams params) {
        // 接受参数P，并传给父类中
        super(params);
    }

    @Override
    public int bindLayoutId() {
        return R.layout.title_bar;
    }

    @Override
    public void applyView() {
        // 绑定UI效果。
        setText(R.id.title, getParams().mTitle);
        setText(R.id.right_title, getParams().mRightTitle);
        // 设置点击事件
        setOnClickListener(R.id.right_title, getParams().mRightClickListener);
        // 通用返回键处理。
        setOnClickListener(R.id.left_title, getParams().mLeftClickListener);
    }


    public static class Builder extends AbsNavigationBar.Builder {
        // 参数保存
        DefaultNavigationParams P;

        public Builder(Context context, ViewGroup parent) {
            super(context, parent);
            P = new DefaultNavigationParams(context, parent);
        }

        public Builder(Context context) {
            super(context, null);
            P = new DefaultNavigationParams(context, null);
        }

        @Override
        public DefaultNavigationBar builder() {
            // 传递P进去，
            DefaultNavigationBar bar = new DefaultNavigationBar(P);
            return bar;
        }

        // 1.设置所有效果。
        public DefaultNavigationBar.Builder setTitle(String title) {
            P.mTitle = title;
            return this;
        }

        public DefaultNavigationBar.Builder setRightTitle(String rightTitle) {
            P.mRightTitle = rightTitle;
            return this;
        }

        // 设置右边图标
        public DefaultNavigationBar.Builder setRightIcon(int rightResId) {
            P.mRightIcon = rightResId;
            return this;
        }

        public DefaultNavigationBar.Builder setRightClickListener(View.OnClickListener rClickListener) {
            P.mRightClickListener = rClickListener;
            return this;
        }
        // 覆盖左边点击事件的方法。
        public DefaultNavigationBar.Builder setLeftClickListener(View.OnClickListener rClickListener) {
            P.mLeftClickListener = rClickListener;
            return this;
        }

        public static class DefaultNavigationParams extends
                AbsNavigationBar.Builder.AbsNavigationParams {
            // 2.存放所有的效果。
            public String mTitle; // 设置中间标题
            public String mRightTitle; // 设置右边按钮文本
            public int mRightIcon; // 设置右边按钮图片

            // 通用的
            public View.OnClickListener mRightClickListener; // 右边点击事件
            // 左边点击事件，有默认事件(关闭)。可以覆盖该方法。
            public View.OnClickListener mLeftClickListener = new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    ((Activity) mContext).finish();
                }
            };

            // 构造方法
            public DefaultNavigationParams(Context context, ViewGroup parent) {
                super(context, parent);
            }
        }
    }

}
